#include "reg.h"

// char : 有符号 8bit
// unsigned char : 无符号 8bit
// short : 有符号 16bit
// unsigned short : 无符号 16bit
// long : 有符号 32bit
// unsigned long : 无符号 32bit

// int : short <= int <= long：32bit

// long long :大长类型 64bit

// 经常从新定义类型
// typedef char int8_t;
// typedef unsigned char uint8_t;

typedef struct _st {
    /* data */
    uint32_t i;
    uint32_t j;
} ST_t;

void reg_test(void)
{

    uint8_t a = 10;

    // 1.位的操作，<< >> | & ^ ~
    // 1.1 << 左位移操作
    a = a << 1;
    // 1.2 >> 右位移操作
    a = a >> 1;
    // 1.3 | 位运算的或操作

    // 2.寄存器的概念
    // 内存？ 未知地址,内存的内容是什么？

    // uint32_t a2; // 初始化内存
    // uint32_t *pA2 = &a2;

    // *pA2        = 20;
    // uint32_t _a = *pA2;

    // uint32_t *pA2 = 0x5588; // 可以直接赋值整数

    // #define pA2 ((uint32_t *)0x5588) // 转化为了uint32_t类型
    //     *pA2 = 30;

    // 开辟一个结构体空间
    ST_t t;
    t.i = 0;
    t.j = 2;

    ST_t *pSt = &t;
    pSt->i    = 3;
    pSt->j    = 4;

    // 寄存器，是一种特殊的内存，已知地址，已知内容。
    ST_t *pSt2 = (ST_t *)0x5588; // 假设t所在的内存地址是0x5588
    pSt2->i    = 5;
    pSt2->j    = 5;

#define pSt3 ((ST_t *)0x5588) // 转化为了uint32_t类型

    pSt3->i = 10;
    pSt3->j = 30;
}